/*******************************************************************************
 * 题目：https://leetcode.cn/contest/weekly-contest-395/problems/find-the-integer-added-to-array-ii/
 *
 * 给你两个整数数组 nums1 和 nums2。
 * 从 nums1 中移除两个元素，并且所有其他元素都与变量 x 所表示的整数相加。如果 x 为负数，则表现为元素值的减少。
 * 执行上述操作后，nums1 和 nums2 相等 。当两个数组中包含相同的整数，并且这些整数出现的频次相同时，两个数组 相等 。
 * 返回能够实现数组相等的 最小 整数 x 。
 ******************************************************************************/

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
const minimumAddedInteger = (nums1, nums2) => {
  const newNum1 = nums1.sort((a, b) => a - b);
  const newNum2 = nums2.sort((a, b) => a - b);

  const n1TopList = newNum1.slice(0, 3);
  const n2TopList = newNum2.slice(0, 1);

  let isPassList = [];

  const map2 = getNum2Map(nums2);

  // 找nums1第一个数字
  n1TopList.map((n1, n1Index) => {
    const diffVal = n2TopList[0] - n1;

    const num1Map = getNm1CountMap(diffVal, nums1);

    if (isSameMap(num1Map, map2)) {
      isPassList.push({
        startVal: n1,
        startIndex: n1Index,
        diffVal,
      });
    }
  });

  // 找第二个数字

  console.log(isPassList);

  return Math.min(...isPassList);
};

/** 寻找第二个数字 往后走3个数字  */
function findSecInNum1(firstNum1, diffVal, num2Sec, checkIndex = 1) {
  if (checkIndex <= 3) {
    return 
  }else{
    return false
  }
}

/** 获取数字出现次数 */
function getNum2Map(nums2) {
  const resMap = {};
  nums2.map((item) => {
    if (resMap[item]) {
      resMap[item] += 1;z
      resMap[item] = 1;
    }
  });
  return resMap;
}

/** 判断两个map是否相同 */
function isSameMap(num1CountMap, num2Map) {
  let res = true;

  const errList = [];

  Object.keys(num2Map).map((key) => {
    if (num1CountMap[key] !== num2Map[key]) {
      // res = false;
      errList.push(key);
    }
  });

  return errList.length <= 2;
}

/** 获取第一个map */
function getNm1CountMap(addVal, num1) {
  const resMap = {};
  num1.map((item) => {
    const newVal = item + addVal;

    if (!resMap[newVal]) {
      resMap[newVal] = 1;
    } else {
      resMap[newVal]++;
    }
  });

  return resMap;
}

// minimumAddedInteger([4, 20, 16, 12, 8], [14, 18, 10]);
minimumAddedInteger([4, 6, 3, 1, 4, 2, 10, 9, 5], [4, 6, 3, 1, 4, 2, 10, 9, 5]);
// minimumAddedInteger([7, 2, 6, 8, 7], [7, 2, 6, 8, 7]);
